using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._Features
{
    /// <summary>
    /// <para>Generate Spot Heights</para>
    /// <para>Creates elevation point features based on contour tops and depressions. Elevation points are created in each top and depression. Point height values are populated based on a digital elevation model.</para>
    /// <para>基于等值线顶部和凹陷创建高程点要素。在每个顶部和凹陷处创建高程点。点高度值基于数字高程模型进行填充。</para>
    /// </summary>    
    [DisplayName("Generate Spot Heights")]
    public class GenerateSpotHeights : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateSpotHeights()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_contour_features">
        /// <para>Input Contours</para>
        /// <para>Contours from which spot heights are computed.</para>
        /// <para>计算光斑高度的等值线。</para>
        /// </param>
        /// <param name="_in_raster">
        /// <para>Input Raster(s)</para>
        /// <para>Rasters used to derive the highest or lowest elevations in contour tops or depressions.</para>
        /// <para>栅格用于派生等值线顶部或凹陷中的最高或最低高程。</para>
        /// </param>
        /// <param name="_target_spot_features">
        /// <para>Target Spot Features</para>
        /// <para>An existing point feature layer or feature class in which spot heights are created.</para>
        /// <para>用于创建点高度的现有点要素图层或要素类。</para>
        /// </param>
        /// <param name="_contour_height_field">
        /// <para>Contour Height Field</para>
        /// <para>The field in the input contours that contains elevation values. The field type must be numeric.</para>
        /// <para>输入等值线中包含高程值的字段。字段类型必须为数值。</para>
        /// </param>
        /// <param name="_spot_height_field">
        /// <para>Spot Height Field</para>
        /// <para>The field in the output spot heights to which elevation values are written.</para>
        /// <para>输出点高度中用于写入高程值的字段。</para>
        /// </param>
        public GenerateSpotHeights(object _in_contour_features, List<object> _in_raster, object _target_spot_features, object _contour_height_field, object _spot_height_field)
        {
            this._in_contour_features = _in_contour_features;
            this._in_raster = _in_raster;
            this._target_spot_features = _target_spot_features;
            this._contour_height_field = _contour_height_field;
            this._spot_height_field = _spot_height_field;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Generate Spot Heights";

        public override string CallName => "topographic.GenerateSpotHeights";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_contour_features, _in_raster, _target_spot_features, _contour_height_field, _spot_height_field, _spot_height_subtype, _area_of_interest, _updated_spot_features];

        /// <summary>
        /// <para>Input Contours</para>
        /// <para>Contours from which spot heights are computed.</para>
        /// <para>计算光斑高度的等值线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Contours")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_contour_features { get; set; }


        /// <summary>
        /// <para>Input Raster(s)</para>
        /// <para>Rasters used to derive the highest or lowest elevations in contour tops or depressions.</para>
        /// <para>栅格用于派生等值线顶部或凹陷中的最高或最低高程。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Raster(s)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_raster { get; set; }


        /// <summary>
        /// <para>Target Spot Features</para>
        /// <para>An existing point feature layer or feature class in which spot heights are created.</para>
        /// <para>用于创建点高度的现有点要素图层或要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Spot Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_spot_features { get; set; }


        /// <summary>
        /// <para>Contour Height Field</para>
        /// <para>The field in the input contours that contains elevation values. The field type must be numeric.</para>
        /// <para>输入等值线中包含高程值的字段。字段类型必须为数值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Height Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _contour_height_field { get; set; }


        /// <summary>
        /// <para>Spot Height Field</para>
        /// <para>The field in the output spot heights to which elevation values are written.</para>
        /// <para>输出点高度中用于写入高程值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spot Height Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _spot_height_field { get; set; }


        /// <summary>
        /// <para>Spot Height Subtype</para>
        /// <para>Spot height subtype value assigned to new spot height features that are created.</para>
        /// <para>分配给创建的新光斑高度要素的光斑高度子类型值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spot Height Subtype")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spot_height_subtype { get; set; } = null;


        /// <summary>
        /// <para>Area of Interest</para>
        /// <para>The extent where spot heights will be created. The area of interest (AOI) is the outer extent of all selected polygons in the feature layer. If none are selected, the extent of the raster will be used. This parameter does not accept point layers as valid input.</para>
        /// <para>将创建光斑高度的范围。感兴趣区域 （AOI） 是要素图层中所有选定面的外部范围。如果未选择任何选项，则将使用栅格的范围。此参数不接受点图层作为有效输入。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _area_of_interest { get; set; } = null;


        /// <summary>
        /// <para>Updated Spot Heights</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Spot Heights")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_spot_features { get; set; }


        public GenerateSpotHeights SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}